1f862661171715e68900b86dc0b6fb82ccbbbc74,core/baseLanguage/baseLanguage/source_gen/jetbrains/mps/baseLanguage/typesystem/subtyping_classifier_SubtypingRule.java,subtyping_classifier_SubtypingRule,getSubOrSuperTypes,#SNode#,20

Before Change


      if (!((SLinkOperations.getTarget(classConcept, "superclass", true) == null))) {
        ListSequence.fromList(supertypes).addElement(SLinkOperations.getTarget(classConcept, "superclass", true));
      }
      ListSequence.fromList(supertypes).addSequence(ListSequence.fromList(SLinkOperations.getTargets(classConcept, "implementedInterface", true)));
    }
    if (SNodeOperations.isInstanceOf(classifier, "jetbrains.mps.baseLanguage.structure.Interface")) {
      SNode interfaceConcept = classifier;
      ListSequence.fromList(supertypes).addSequence(ListSequence.fromList(SLinkOperations.getTargets(interfaceConcept, "extendedInterface", true)));
    }
    if (ListSequence.fromList(supertypes).isEmpty()) {
      ListSequence.fromList(result).addElement(new _Quotations.QuotationClass_4().createNode());
    }
    for(SNode supertype : supertypes) {
      SNode supertypeCopy = SNodeOperations.copyNode(supertype);
      for(SNode typeParam : new ArrayList<SNode>(SLinkOperations.getTargets(supertypeCopy, "parameter", true))) {
        if (SNodeOperations.isInstanceOf(typeParam, "jetbrains.mps.baseLanguage.structure.TypeVariableReference")) {
          SNode tvr = typeParam;
          int i = ListSequence.fromList(SLinkOperations.getTargets(classifier, "typeVariableDeclaration", true)).indexOf(SLinkOperations.getTarget(tvr, "typeVariableDeclaration", false));
          if (i < 0 || i >= SLinkOperations.getCount(clt, "parameter")) {
            ((SNode)supertypeCopy).removeChild(typeParam);
            continue;
          }
          SNode newNode = SNodeOperations.copyNode(ListSequence.fromList(SLinkOperations.getTargets(clt, "parameter", true)).getElement(i));
          supertypeCopy.replaceChild(typeParam, newNode);
        }
      }
      ListSequence.fromList(result).addElement(supertypeCopy);
    }
    ListSequence.fromList(supertypes).addElement(clt);
    for(SNode supertype : supertypes) {

After Change



  public List<SNode> getSubOrSuperTypes(SNode clt) {
    SNode classifier = SLinkOperations.getTarget(clt, "classifier", false);
    List<SNode> result = new ArrayList<SNode>();
    List<SNode> supertypes = new ArrayList<SNode>();
    if (SNodeOperations.isInstanceOf(classifier, "jetbrains.mps.baseLanguage.structure.ClassConcept")) {
      SNode classConcept = classifier;
      if (!((SLinkOperations.getTarget(classConcept, "superclass", true) == null))) {
        supertypes.add(SLinkOperations.getTarget(classConcept, "superclass", true));
      }
      supertypes.addAll(SLinkOperations.getTargets(classConcept, "implementedInterface", true));
    }
    if (SNodeOperations.isInstanceOf(classifier, "jetbrains.mps.baseLanguage.structure.Interface")) {
      SNode interfaceConcept = classifier;